﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace V82.ОбщиеМодули
{
	public partial class УправлениеПечатьюКлиент
	{
		// Выполнить команду печати, которая открывает результат в форме печати документов.
		//
		// Если в параметре ПараметрыПечати передать структуру, содержащую свойство
		// ПереопределитьПользовательскиеНастройкиКоличества = Истина, то пользовательские
		// настройки количества копий не будут восстановлены, и не запишутся.

		public void ВыполнитьКомандуПечати(/*ИмяМенеджераПечати, ИменаМакетов, ПараметрКоманды, ВладелецФормы, ПараметрыПечати = Неопределено*/)
		{
			/*// Проверим количество объектов
*/
			if(true/*НЕ ПроверитьКоличествоПереданныхОбъектов(ПараметрКоманды)*/)
			{
			}
			/*// Получим ключ уникальности открываемой формы
*/
			//КлючУникальности = Строка(Новый УникальныйИдентификатор);
			//ПараметрыОткрытия = Новый Структура("ИмяМенеджераПечати,ИменаМакетов,ПараметрКоманды,ПараметрыПечати");
			//ПараметрыОткрытия.ИмяМенеджераПечати = ИмяМенеджераПечати;
			//ПараметрыОткрытия.ИменаМакетов		 = ИменаМакетов;
			//ПараметрыОткрытия.ПараметрКоманды	 = ПараметрКоманды;
			//ПараметрыОткрытия.ПараметрыПечати	 = ПараметрыПечати;
			/*// Откроем форму печати документов
*/
			//ОткрытьФорму("ОбщаяФорма.ПечатьДокументовУправляемая", ПараметрыОткрытия, ВладелецФормы, КлючУникальности);
		}
		// Выполнить команду печати, которая результат выводит на принтер

		public void ВыполнитьКомандуПечатиНаПринтер(/*ИмяМенеджераПечати, ИменаМакетов, ПараметрКоманды, ПараметрыПечати = Неопределено*/)
		{
			/*// Проверим количество объектов
*/
			if(true/*НЕ ПроверитьКоличествоПереданныхОбъектов(ПараметрКоманды)*/)
			{
			}
			//ПараметрыВывода = Неопределено;
			/*// Сформируем табличные документы
*/
			/*УправлениеПечатью.СформироватьПечатныеФормыДляБыстройПечатиОбычноеПриложение(
			ИмяМенеджераПечати, ИменаМакетов, ПараметрКоманды, ПараметрыПечати,
			Адрес, ОбъектыПечатиСоотв, ПараметрыВывода, Отказ);*/
			if(true/*НЕ Отказ*/)
			{
				//ОбъектыПечати = Новый СписокЗначений;
				//ТабличныеДокументы = ПолучитьИзВременногоХранилища(Адрес);
			}
			/*УправлениеПечатью.СформироватьПечатныеФормыДляБыстройПечати(
			ИмяМенеджераПечати, ИменаМакетов, ПараметрКоманды, ПараметрыПечати,
			ТабличныеДокументы, ОбъектыПечати, ПараметрыВывода, Отказ);*/
			if(true/*Отказ*/)
			{
				//ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Нет прав для вывода печатной формы на принтер, обратитесь к администратору системы.'"));
			}
			/*// Распечатаем
*/
			/*РаспечататьТабличныеДокументы(ТабличныеДокументы, ОбъектыПечати,
			ПараметрыВывода.ДоступнаПечатьПоКомплектно);*/
		}
		// Вывести табличные документы на принтер

		public void РаспечататьТабличныеДокументы(/*ТабличныеДокументы, ОбъектыПечати, 
		Знач ДоступнаПечатьПокомплектно*/)
		{
			//ДоступнаПечатьПокомплектно = Ложь;
			if(true/*ДоступнаПечатьПокомплектно*/)
			{
			}
		}
		// Перед выполнение команды печати проверить, был ли передан хотя бы один объект, так как
		// для команд с множественным режимом использования может быть передан пустой массив.

		public object ПроверитьКоличествоПереданныхОбъектов(/*ПараметрКоманды*/)
		{
			if(true/*ТипЗнч(ПараметрКоманды) = Тип("Массив") И ПараметрКоманды.Количество() = 0*/)
			{
			}
			return null;
		}
		// Проверяет, проведенность документов перед печатью.
		// Если есть непроведенные документы, то предлагает перепровести.
		//
		// Параметры
		//  ДокументыМассив - Массив           - ссылки на документы, которые должны быть проведены перед печатью.
		//  ФормаИсточник   - УправляемаяФорма - форма, из которой было вызвана команда.
		//

		public object ПроверитьДокументыПроведены(/*ДокументыМассив, ФормаИсточник = Неопределено*/)
		{
			//ОчиститьСообщения();
			//МассивНепроведенныхДокументов = ОбщегоНазначения.ПроверитьПроведенностьДокументов(ДокументыМассив);
			//КоличествоНепроведенныхДокументов = МассивНепроведенныхДокументов.Количество();
			if(true/*КоличествоНепроведенныхДокументов > 0*/)
			{
				if(true/*КоличествоНепроведенныхДокументов = 1*/)
				{
					//ТекстВопроса = НСтр("ru = 'Для того чтобы распечатать документ, его необходимо предварительно провести. Выполнить проведение документа и продолжить?'");
				}
				//КодОтвета = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);
				if(true/*КодОтвета <> КодВозвратаДиалога.Да*/)
				{
				}
				//ТипПроведенныхДокументов = Неопределено;
				//МассивНепроведенныхДокументов = ОбщегоНазначения.ПровестиДокументы(МассивНепроведенныхДокументов, ТипПроведенныхДокументов);
				//ОповеститьОбИзменении(ТипПроведенныхДокументов);
				/*// Если команда была вызвана из формы, то зачитываем в форму актуальную (проведенную) копию из базы.
*/
				if(true/*ТипЗнч(ФормаИсточник) = Тип("УправляемаяФорма")*/)
				{
				}
			}
			//ШаблонСообщения = НСтр("ru = 'Документ %1 не проведен: %2 Печать невозможна.'");
			//Отказ = Ложь;
			if(true/*КоличествоНепроведенныхДокументов > 0
		и МассивНепроведенныхДокументов.Количество() > 0
		и ДокументыМассив.Количество() > 0*/)
			{
				//КнопкиДиалога = Новый СписокЗначений;
				//КнопкиДиалога.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Продолжить'"));
				//КнопкиДиалога.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Нет'"));
				//Ответ = Вопрос(НСтр("ru = 'Не удалось провести один или несколько документов. Продолжить?'"), КнопкиДиалога);
				if(true/*Ответ = КодВозвратаДиалога.Нет*/)
				{
					//Отказ = Истина;
				}
			}
			return null;
		}
		////////////////////////////////////////////////////////////////////////////////
		// СЕКЦИЯ ФУНКЦИОНАЛЬНОСТИ ДЛЯ РАБОТЫ С МАКЕТАМИ ОФИСНЫХ ДОКУМЕНТОВ
		//
		//	Краткое описание:
		//	Секция содержит интерфейсные функции (API), используемые при создании
		//	печатных форм основанных на офисных документах. На данный момент поддерживается
		//	два офисных пакета MS Office (шаблоны MS Word) и Open Office (шаблоны OO Writer).
		//
		////////////////////////////////////////////////////////////////////////////////
		//	типы используемых данных (определяется конкретными реализациями)
		//	СсылкаПечатнаяФорма	- ссылка на печатную форму
		//	СсылкаМакет			- ссылка на макет
		//	Область				- ссылка на область в печатной форме или макете (структура)
		//						доопределяется в интерфейсном модуле служебной информацией
		//						об области
		//	ОписаниеОбласти			- описание области макета (см. ниже)
		//	ДанныеЗаполнения		- либо структура, либо массив структур (для случая
		//							списков и таблиц
		////////////////////////////////////////////////////////////////////////////////
		//	ОписаниеОбласти - структура, описывающая подготовленные пользователем области макета
		//	ключ ИмяОбласти - имя области
		//	ключ ТипТипОбласти - 	ВерхнийКолонтитул
		//							НижнийКолонтитул
		//							Общая
		//							СтрокаТаблицы
		//							Список
		//
		////////////////////////////////////////////////////////////////////////////////
		// Функции инициализации и закрытия ссылок
		// Создает соединение с выходной печатной формой.
		// Необходимо вызвать перед любыми действиями над формой.
		// Параметры:
		// ТипДокумента - строка - тип печатной формы либо "ODT" либо "ODT"
		//
		// Возвращаемое значение:
		// СсылкаПечатнаяФорма
		//

		public object ИнициализироватьПечатнуюФорму(/*знач ТипДокумента, знач НастройкиСтраницыМакета = Неопределено*/)
		{
			if(true/*ВРег(ТипДокумента) = "DOC"*/)
			{
				//ПечатнаяФорма = УправлениеПечатьюMSWordКлиент.ИнициализироватьПечатнуюФормуMSWord(НастройкиСтраницыМакета);
				//ПечатнаяФорма.Вставить("Тип", "DOC");
				//ПечатнаяФорма.Вставить("ПоследняяВыведеннаяОбласть", Неопределено);
			}
			return null;
		}
		// Создает соединение с макетом. В дальнейшем это соединение используется
		// при получении из него областей (тегов и таблиц).
		//
		// Параметры:
		//  ДвоичныеДанныеМакета - ДвоичныеДанные - двоичные данные макета
		//  ТипШаблона - тип макета, либо "ODT", либо "ODT"
		// Возвращаемое значение:
		//  СсылкаМакет
		//

		public object ИнициализироватьМакет(/*знач ДвоичныеДанныеМакета, знач ТипМакета, знач ПутьККаталогу = "", знач ИмяМакета = ""*/)
		{
			//ТекстСообщения = НСтр("ru = 'Для продолжения печати необходимо установить расширение работы с файлами.'");
			if(true/*Не ОбщегоНазначенияКлиент.РасширениеРаботыСФайламиПодключено(ТекстСообщения)*/)
			{
			}
			if(true/*ПустаяСтрока(ИмяМакета)*/)
			{
				//ИмяВременногоФайла = Строка(Новый УникальныйИдентификатор) + "." + НРег(ТипМакета);
			}
			//ПолучаемыеФайлы = Новый Соответствие;
			//ПолучаемыеФайлы.Вставить(ИмяВременногоФайла, ДвоичныеДанныеМакета);
			//Результат = ПолучитьФайлыВКаталогФайловПечати(ПутьККаталогу, ПолучаемыеФайлы);
			if(true/*Результат = Неопределено*/)
			{
			}
			//ИмяВременногоФайла = Результат + ИмяВременногоФайла;
			//ИмяВременногоФайла = "";
			if(true/*ВРег(ТипМакета) = "DOC"*/)
			{
				//Макет = УправлениеПечатьюMSWordКлиент.ПолучитьМакетMSWord(ДвоичныеДанныеМакета, ИмяВременногоФайла);
				//Макет.Вставить("Тип", "DOC");
			}
			return null;
		}
		// Функция получает файл(ы) c сервера в локальный каталог на диск и возвращает
		// имя каталога, в который они были сохранены
		// Параметры:
		// ПутьККаталогу - строка - путь к каталогу, в который должны быть сохранены файлы
		// ПолучаемыеФайлы - соответствие -
		//                         ключ  - имя файла
		//                         значение - двоичные данные файла
		//

		public object ПолучитьФайлыВКаталогФайловПечати(/*ПутьККаталогу, ПолучаемыеФайлы*/)
		{
			//ТребуетсяУстановитьКаталогПечати = Не ЗначениеЗаполнено(ПутьККаталогу);
			if(true/*Не ТребуетсяУстановитьКаталогПечати*/)
			{
				//Файл = Новый Файл(ПутьККаталогу);
				if(true/*НЕ Файл.Существует()*/)
				{
					//ТребуетсяУстановитьКаталогПечати = Истина;
				}
			}
			if(true/*ТребуетсяУстановитьКаталогПечати*/)
			{
				//Результат = ОткрытьФормуМодально("РегистрСведений.ПользовательскиеМакетыПечати.Форма.НастройкаКаталогаФайловПечати");
				if(true/*ТипЗнч(Результат) <> Тип("Строка")*/)
				{
				}
				//ПутьККаталогу = Результат;
			}
			//ПовторятьПечать = Истина;
			while(true/*ПовторятьПечать*/)
			{
				//ПовторятьПечать = Ложь;
			}
			if(true/*Прав(ПутьККаталогу, 1) <> "\"*/)
			{
				//ПутьККаталогу = ПутьККаталогу + "\";
			}
			return null;
		}
		// Помещает набор двоичных данных во временное хранилище
		// Параметры:
		// 	НаборЗначений - соответствие, ключ - ключ, связанный с двоичными данными
		// 								  значение - ДвоичныеДанные
		// Возвращаемое значение:
		// соответствие: ключ - ключ, связанный с адресом во временном хранилище
		//               значение - адрес во временном хранилище
		//

		public object ПолучитьАдресаФайловВоВременномХранилище(/*НаборЗначений*/)
		{
			//Результат = Новый Соответствие;
			return null;
		}
		// Освобождает ссылки в созданном интерфейсе связи с офисным приложением.
		// Необходимо вызывать каждый раз после завершения формирования макета и выводе
		// печатной формы пользователю.
		// Параметры:
		// Handler - СсылкаПечатнаяФорма, СсылкаМакет
		// ЗакрытьПриложение - булево - признак, требуется ли закрыть приложение.
		//					Соединение с макетом требуется закрывать с закрытием приложения.
		//					ПечатнуюФорму не требуется закрывать.
		//

		public void ОчиститьСсылки(/*Handler, знач ЗакрытьПриложение = Истина*/)
		{
			if(true/*Handler <> Неопределено*/)
			{
				if(true/*Handler.Тип = "DOC"*/)
				{
					//УправлениеПечатьюMSWordКлиент.ЗакрытьСоединение(Handler, ЗакрытьПриложение);
				}
				//Handler = Неопределено;
			}
		}
		////////////////////////////////////////////////////////////////////////////////
		// Функция отображения печатной формы пользователю
		// Показывает сформированный документ пользователю.
		// Фактически устанавливает ему признак видимости.
		// Параметры
		//  Handler - СсылкаПечатнаяФорма
		//

		public void ПоказатьДокумент(/*знач Handler*/)
		{
			if(true/*Handler.Тип = "DOC"*/)
			{
				//УправлениеПечатьюMSWordКлиент.ПоказатьДокументMSWord(Handler);
			}
		}
		////////////////////////////////////////////////////////////////////////////////
		// Функции получения областей из макета, вывода в печатную форму областей макета
		// и заполнение параметров в них
		// Получает область из макета.
		// Параметры
		// СсылкаМакет - СсылкаМакет - ссылка на макет
		// ОписаниеОбласти - ОписаниеОбласти - описание области
		//
		// Возвращаемое значение
		// Область - область из макета
		//

		public object ПолучитьОбласть(/*знач СсылкаМакет, знач ОписаниеОбласти*/)
		{
			//Область = Неопределено;
			if(true/*СсылкаМакет.Тип = "DOC"*/)
			{
				if(true/*ОписаниеОбласти.ТипОбласти = "ВерхнийКолонтитул"*/)
				{
					//Область = УправлениеПечатьюMSWordКлиент.ПолучитьОбластьВерхнегоКолонтитула(СсылкаМакет);
				}
				if(true/*Область <> Неопределено*/)
				{
					//Область.Вставить("ОписаниеОбласти", ОписаниеОбласти);
				}
			}
			return null;
		}
		// Присоединяет область в печатную форму из макета.
		// Применяется при одиночном выводе области.
		//
		// Параметры
		// ПечатнаяФорма - СсылкаПечатнаяФорма - ссылка на печатную форму
		// ОбластьМакета - Область - область из макета
		// ПереходНаСледующуюСтроку - булево, требуется ли вставлять разрыв после вывода области
		//

		public void ПрисоединитьОбласть(/*знач ПечатнаяФорма,
							  знач ОбластьМакета,
							  знач ПереходНаСледующуюСтроку = Истина*/)
		{
			if(true/*ОбластьМакета = Неопределено*/)
			{
			}
		}
		// Заполняет параметры области печатной формы
		//
		// Параметры
		// ПечатнаяФорма	- СсылкаПечатнаяФорма, Область - область печатной формы, либо сама печатная форма
		// Данные			- ДанныеЗаполнения
		//

		public void ЗаполнитьПараметры(/*знач ПечатнаяФорма, знач Данные*/)
		{
			//ОписаниеОбласти = ПечатнаяФорма.ПоследняяВыведеннаяОбласть;
			if(true/*ПечатнаяФорма.Тип = "DOC"*/)
			{
				if(true/*ОписаниеОбласти.ТипОбласти = "ВерхнийКолонтитул"*/)
				{
					//УправлениеПечатьюMSWordКлиент.ЗаполнитьПараметрыВерхнегоКолонтитула(ПечатнаяФорма, Данные);
				}
			}
		}
		// Добавляет область в печатную форму из макета, при этом заменяя
		// параметры в области значениями из данных объекта.
		// Применяется при одиночном выводе области.
		//
		// Параметры
		// ПечатнаяФорма	- СсылкаПечатнаяФорма
		// ОбластьМакета	- Область
		// Данные			- ДанныеОбъекта
		// ПереходНаСледСтроку - булево, требуется ли вставлять разрыв после вывода области
		//

		public void ПрисоединитьОбластьИЗаполнитьПараметры(/*знач ПечатнаяФорма,
										знач ОбластьМакета,
										знач Данные,
										знач ПереходНаСледующуюСтроку = Истина*/)
		{
			if(true/*ОбластьМакета <> Неопределено*/)
			{
				//ПрисоединитьОбласть(ПечатнаяФорма, ОбластьМакета, ПереходНаСледующуюСтроку);
				//ЗаполнитьПараметры(ПечатнаяФорма, Данные);
			}
		}
		// Добавляет область в печатную форму из макета, при этом заменяя
		// параметры в области значениями из данных объекта.
		// Применяется при одиночном выводе области.
		//
		// Параметры
		// ПечатнаяФорма	- СсылкаПечатнаяФорма
		// ОбластьМакета	- Область - область макета
		// Данные			- ДанныеОбъекта (массив структур)
		// ПереходНаСледСтроку - булево, требуется ли вставлять разрыв после вывода области
		//

		public void ПрисоединитьИЗаполнитьКоллекцию(/*знач ПечатнаяФорма,
										знач ОбластьМакета,
										знач Данные,
										знач ПереходНаСледСтроку = Истина*/)
		{
			if(true/*ОбластьМакета = Неопределено*/)
			{
			}
			//ОписаниеОбласти = ОбластьМакета.ОписаниеОбласти;
			if(true/*ПечатнаяФорма.Тип = "DOC"*/)
			{
				if(true/*ОписаниеОбласти.ТипОбласти = "СтрокаТаблицы"*/)
				{
					//УправлениеПечатьюMSWordКлиент.ПрисоединитьИЗаполнитьОбластьТаблицы(ПечатнаяФорма, ОбластьМакета, Данные, ПереходНаСледСтроку);
				}
			}
		}
		// Вставляет разрыв между строками в виде символа перевода строки
		// Параметры
		// ПечатнаяФорма - СсылкаПечатнаяФорма
		//

		public void ВставитьРазрывНаНовуюСтроку(/*знач ПечатнаяФорма*/)
		{
			if(true/*ПечатнаяФорма.Тип = "DOC"*/)
			{
				//УправлениеПечатьюMSWordКлиент.ВставитьРазрывНаНовуюСтроку(ПечатнаяФорма);
			}
		}
	}
}
